// * Rest参数 ... (Rest参数必须放在参数列表末尾)

function sumAll(...args) {
	let sum = 0
	for (const arg of args) sum += arg
	return sum
}

console.log(sumAll(1)) // 1
console.log(sumAll(1, 2)) // 3
console.log(sumAll(1, 2, 3)) // 6

// *************************************************************************

// * arguments (arguments 是一个类数组，也是可迭代对象)。只有 函数声明 和 函数表达式 才有 arguments，箭头函数没有 arguments。

function foo() {
	console.log(arguments)
}

foo(1, 2, 3)

const bar = function () {
	console.log(arguments)
}

bar(1, 2, 3)

// *************************************************************************

// * ... Spread语法（扩展运算符），把可迭代对象 “展开” 到参数列表中（Spread 语法 和 for...of 相同，都是使用“迭代器”来遍历元素）。

let arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
console.log(Math.max(...arr1, ...arr2)) // 6

let str = 'string'
console.log([...str]) // [ 's', 't', 'r', 'i', 'n', 'g' ]
